perm filename COMP.LST[HAL,HE] blob sn#155556 filedate 1975-04-24 generic text, type T, neo UTF8
	PALX 222	04/24/75  12:00:45	PAGE 1
	INTOPS PAL[HAL,HE]	PAGE 2 	DEFS -- standard definitions for HAL runtime routines

		44000	2	8		       .ERROR You are using (XVARIABLE in two ways!!!
	PALX 222	04/24/75  12:00:45	PAGE 2
	COMP PAL[HAL,HE]	PAGE 1 	

				COMMENT ⊗   VALID 00002 PAGES
				C REC  PAGE   DESCRIPTION
				C00001 00001
				C00002 00002	 File that requires all the compiled files.  This is meant to be
				C00003 ENDMK
					C⊗;
	PALX 222	04/24/75  12:00:45	PAGE 3
	COMP PAL[HAL,HE]	PAGE 2 	

					; File that requires all the compiled files.  This is meant to be
					;overlaid on top of the interpreter. 
					
		044000			. = 44000	;Beginning of instruction space
					
						.MACRO MAKEOP CNAME, ANAME	;Compiler name, Address name
						XX	CNAME
						.ENDM
					
					.INSRT HALHED.PAL[HAL,HE]
	PALX 222	04/24/75  12:00:45	PAGE 4
	HALHED PAL[HAL,HE]	PAGE 1 	

				COMMENT ⊗   VALID 00005 PAGES
				C REC  PAGE   DESCRIPTION
				C00001 00001
				C00002 00002	.SBTTL  ASSEMBLY FLAGS
				C00005 00003	routine calling and defining macros.
				C00008 00004	macros for handling tables & blocks
				C00012 00005	Graph structure definitions
				C00014 ENDMK
					C⊗;
	PALX 222	04/24/75  12:00:45	PAGE 5
	HALHED PAL[HAL,HE]	PAGE 2 	ASSEMBLY FLAGS

					.SBTTL  ASSEMBLY FLAGS
					
					;This macro gives the switch SW a default value VAL
					       .MACRO STSW SW,VAL
					       .IFNDF SW
						SW == VAL   ;if do not have a value already, give it one
					       .ENDC
					       .ENDM
					
						STSW  FLOAT,1	;0 => no floating point capacity
					       .IFNDF FLOAT
						FLOAT == 1   ;if do not have a value already, give it one
					       .ENDC
					
					.SBTTL	DEFS -- standard definitions for HAL runtime routines
					
					; PROGRAM DEFINITIONS
					
		000004			ERRTRP==4		;time out and error trap
		000010			ILGINS==10		;illegal instruction
		000104			CLKTRP==104		;clock trap
		050000			RUG=50000		;Restart of RUG
		177776			PS=177776		;processor status word
		177560			KBIS=177560		;keyboard input status
		177562			KBIR=177562		;keyboard input register
		177564			KBOS=177564		;keyboard output status
		177566			KBOR=177566		;keyboard output register
		172544			CLKCNT=172544		;clock counter
		172542			CLKSET=172542		;clock set register
		172540			CLKS=172540		;clock status
					
		000500			STRT11=500		;starting address of program
		000150			IBUF==150		;start of input buffer from 11
		000160			OBUF==160		;start of output buffer to 11 
		077776			HCOR=77776		;highest useable word in core
					
					
					;REGISTER DEFINITIONS
					
		000007			PC=%7			;program counter
		000006			SP=%6			;stack pointer
		000005			RF==%5			;Display pointer
		000005			R5=%5
		000004			R4=%4			;Saved across procedure calls
		000003			R3=%3			;Saved across procedure calls
		000002			R2=%2			;Saved across procedure calls
		000001			R1=%1			;temp
		000000			R0=%0			;temp
		000005			AC5==%5			;Temp Floating point register
	PALX 222	04/24/75  12:00:45	PAGE 6
	HALHED PAL[HAL,HE]	PAGE 2.1 	DEFS -- standard definitions for HAL runtime routines

		000004			AC4==%4			; "      "       "      "
		000003			AC3==%3			; "      "       "      "
		000002			AC2==%2			; "      "       "      "
		000001			AC1==%1			; "      "       "      "
		000000			AC0==%0			; "      "       "      "
					
					;MARK DEFINITIONS
		006400			MARK0 == 6400		;MARK 0
		006401			MARK1 == 6401		;MARK 1
		006402			MARK2 == 6402		;ETC.
		006403			MARK3 == 6403
		006404			MARK4 == 6404
		006405			MARK5 == 6405
					
					;Absolute address initialization
		044000			TEMP == .		;Save location counter for a bit.
		000244			. = 244			;Floating exception
	000244	000246				.WORD 246
	000246	000002				RTI		;No action taken
		044000			. = TEMP		;Restore location counter
	PALX 222	04/24/75  12:00:45	PAGE 7
	HALHED PAL[HAL,HE]	PAGE 3 	DEFS -- standard definitions for HAL runtime routines

					;routine calling and defining macros.
					;Coded by RHT 9/74.
					
					;This should be used at the start of routines which reference
					;	parameters off the RF stack.  It gives the parameters
					;	symbolic names for clarity of coding.
					;For example,
					;
					;	ROUTINE FOO,<A,B>
					;
					;Goes to
					;
					;	A==4
					;	B==2
					;FOO:
					
					       .MACRO ROUTINE ID,ARGS
					           .IFNB ARGS
						    NNNN==0
						       .IRP II,<ARGS>		;Raise NNNN to twice the number of args.
							NNNN==NNNN+2
						       .ENDM
						       .IRP II,<ARGS>		;Assign each arg NNNN and decrease same.
							.IFDF II
							   .IF1 
							   	.ERROR Multiple definition for II
							   .ENDC
							.IFF
							    II == NNNN
							    NNNN == NNNN-2
							.ENDC
						       .ENDM
						   .ENDC
					ID:
					       .ENDM
					
					;This is useful in calling rountines which reference parameters off
					;	the RF stack.  It sets up the stack properly, but does not
					;	save R0 or R1.
					
					       .MACRO CALL ID,ARGS
						MOV	RF,-(SP)	;Save RF
						NNNN == 6400		;This is a MARK 0 instruction
						   .IFNB ARGS
						       .IRP II,<ARGS>
							MOV	II,-(SP);Push an argument
							NNNN == NNNN+1	;Make NNNN the next MARK instruction.
						       .ENDM
						   .ENDC
	PALX 222	04/24/75  12:00:45	PAGE 8
	HALHED PAL[HAL,HE]	PAGE 3.1 	DEFS -- standard definitions for HAL runtime routines

						MOV	#NNNN,-(SP)	;Push the mark instruction.
						MOV	SP,RF		;Set up the display in RF.
						JSR	PC,ID		;Call the routine
					       .ENDM
					
					
					;This macro is a temporary(ha,ha) method of defining floating point
					;constants. LABIL is the constant name and MSB and LSB it's two
					;16bit octal parts.
					
					       .MACRO FP  LABIL,MSB,LSB
						.MACRO  LABIL
						 	.WORD	MSB,LSB	
						.ENDM
					       .ENDM
					
					;Macros to tell value of variable during assembly
						.MACRO TELL VAR
							TELL2 VAR,\VAR
						.ENDM
					
						.MACRO TELL2 S,V
							.PRINT /S = /
							.PRINT /V
					/
						.ENDM
	PALX 222	04/24/75  12:00:45	PAGE 9
	HALHED PAL[HAL,HE]	PAGE 4 	DEFS -- standard definitions for HAL runtime routines

					;macros for handling tables & blocks
					
					       .MACRO	XX SYM			;Just gives SYM the next number.
						   .IFDF SYM
						       .IF1
						       .ERROR You are using SYM in two ways!!!
						       .ENDC
						   .ENDC
						    SYM == II
						    II == II+2
					       .ENDM
					
					.MACRO PUTLOC	ADR,VAL
						II==.
						.= ADR
						VAL
						.=II
					.ENDM
					
					.MACRO TT INX,VAL
						.=II+INX
						VAL
					.ENDM
					
					;SMALL BLOCK DESCRIPTOR FORMAT
					
		000000				II == 0
						XX	IDFLAG	;ACTUALLY A BYTE -- GETS PUT IN ID PART OF TAG WORD
						   .IFDF IDFLAG
						       .IF1
						       .ERROR You are using IDFLAG in two ways!!!
						       .ENDC
						   .ENDC
		000000				    IDFLAG == II
		000002				    II == II+2
						XX	MAPRTN	;ROUTINE TO BE CALLED ON MARK
						   .IFDF MAPRTN
						       .IF1
						       .ERROR You are using MAPRTN in two ways!!!
						       .ENDC
						   .ENDC
		000002				    MAPRTN == II
		000004				    II == II+2
						XX	SIZE	;How many words for a value cell in this type block.
						   .IFDF SIZE
						       .IF1
						       .ERROR You are using SIZE in two ways!!!
						       .ENDC
						   .ENDC
	PALX 222	04/24/75  12:00:45	PAGE 10
	HALHED PAL[HAL,HE]	PAGE 4.1 	DEFS -- standard definitions for HAL runtime routines

		000004				    SIZE == II
		000006				    II == II+2
						XX	NPERB	;NUMBER OF BLOCKS PER BUFFER
						   .IFDF NPERB
						       .IF1
						       .ERROR You are using NPERB in two ways!!!
						       .ENDC
						   .ENDC
		000006				    NPERB == II
		000010				    II == II+2
						XX	GCFG	;SET IF THIS IS NOT A COLLECTABLE AREA
						   .IFDF GCFG
						       .IF1
						       .ERROR You are using GCFG in two ways!!!
						       .ENDC
						   .ENDC
		000010				    GCFG == II
		000012				    II == II+2
						XX	NMIN	;MIN NUMBER OF FREE BLOCKS TO BE RETURNED BY GC
						   .IFDF NMIN
						       .IF1
						       .ERROR You are using NMIN in two ways!!!
						       .ENDC
						   .ENDC
		000012				    NMIN == II
		000014				    II == II+2
						XX	NPCT	;MIN % OF FREE BLOCKS TO BE RETURNED BY GC
						   .IFDF NPCT
						       .IF1
						       .ERROR You are using NPCT in two ways!!!
						       .ENDC
						   .ENDC
		000014				    NPCT == II
		000016				    II == II+2
						XX	NXTSID	;NEXT BLOCK ON ID CHAIN 
						   .IFDF NXTSID
						       .IF1
						       .ERROR You are using NXTSID in two ways!!!
						       .ENDC
						   .ENDC
		000016				    NXTSID == II
		000020				    II == II+2
						XX	FFREE	;FREE LIST
						   .IFDF FFREE
						       .IF1
						       .ERROR You are using FFREE in two ways!!!
						       .ENDC
						   .ENDC
		000020				    FFREE == II
	PALX 222	04/24/75  12:00:45	PAGE 11
	HALHED PAL[HAL,HE]	PAGE 4.2 	DEFS -- standard definitions for HAL runtime routines

		000022				    II == II+2
						XX	FSTBUF	;OLDEST BUFFER
						   .IFDF FSTBUF
						       .IF1
						       .ERROR You are using FSTBUF in two ways!!!
						       .ENDC
						   .ENDC
		000022				    FSTBUF == II
		000024				    II == II+2
						XX	LSTBUF	;NEWEST BUFFER
						   .IFDF LSTBUF
						       .IF1
						       .ERROR You are using LSTBUF in two ways!!!
						       .ENDC
						   .ENDC
		000024				    LSTBUF == II
		000026				    II == II+2
						XX	NALLOC	;NUMBER ALLOCATED
						   .IFDF NALLOC
						       .IF1
						       .ERROR You are using NALLOC in two ways!!!
						       .ENDC
						   .ENDC
		000026				    NALLOC == II
		000030				    II == II+2
						XX	NFREE	;NUMBER FREE
						   .IFDF NFREE
						       .IF1
						       .ERROR You are using NFREE in two ways!!!
						       .ENDC
						   .ENDC
		000030				    NFREE == II
		000032				    II == II+2
		000032				SPCHDR == II
					
					;; EACH BUFFER
		000000				II == 0
						XX	NXTBUF	;NEXT BUFFER
						   .IFDF NXTBUF
						       .IF1
						       .ERROR You are using NXTBUF in two ways!!!
						       .ENDC
						   .ENDC
		000000				    NXTBUF == II
		000002				    II == II+2
						XX	PRVBUF	;PREVIOUS BUFFER
						   .IFDF PRVBUF
						       .IF1
						       .ERROR You are using PRVBUF in two ways!!!
	PALX 222	04/24/75  12:00:45	PAGE 12
	HALHED PAL[HAL,HE]	PAGE 4.3 	DEFS -- standard definitions for HAL runtime routines

						       .ENDC
						   .ENDC
		000002				    PRVBUF == II
		000004				    II == II+2
						XX	LSTBLK	;ADDRESS OF LAST BLOCK IN THIS BUFFER
						   .IFDF LSTBLK
						       .IF1
						       .ERROR You are using LSTBLK in two ways!!!
						       .ENDC
						   .ENDC
		000004				    LSTBLK == II
		000006				    II == II+2
						XX	FSTBLK	;POINTS AT FIRST LOCN
						   .IFDF FSTBLK
						       .IF1
						       .ERROR You are using FSTBLK in two ways!!!
						       .ENDC
						   .ENDC
		000006				    FSTBLK == II
		000010				    II == II+2
		000010				BUFHDR == II
					
					;; EACH BLOCK
		000000				II == 0
		177777				TAG == -1	;≠0 MEANS INUSE (USED IN GC)
		177776				TAGID == -2	;USED TO HOLD AN "ID" FOR THIS RECORD
						XX	WORD0	;FIRST DATA WORD
						   .IFDF WORD0
						       .IF1
						       .ERROR You are using WORD0 in two ways!!!
						       .ENDC
						   .ENDC
		000000				    WORD0 == II
		000002				    II == II+2
					
					;;GC METHODS
		000000				II == 0
						XX	METH	;ROUTINE TO CALL
						   .IFDF METH
						       .IF1
						       .ERROR You are using METH in two ways!!!
						       .ENDC
						   .ENDC
		000000				    METH == II
		000002				    II == II+2
						XX	NXTMTH	;NEXT ON CHAIN
						   .IFDF NXTMTH
						       .IF1
						       .ERROR You are using NXTMTH in two ways!!!
	PALX 222	04/24/75  12:00:45	PAGE 13
	HALHED PAL[HAL,HE]	PAGE 4.4 	DEFS -- standard definitions for HAL runtime routines

						       .ENDC
						   .ENDC
		000002				    NXTMTH == II
		000004				    II == II+2
					
					.MACRO MMETH ROUT
						ROUT
						0
					.ENDM
					
					;;SPECIAL SPACES
					.IF2
		000000				SIDHED == SIDCHN ;SO AUTOMATIC LINKAGE WORKS
					.ENDC
					
		000000			SIDCNT == 0;
		000000			SIDCHN == 0;
					
					.MACRO DEFSPC ID,MMRT,SZ,NPB,GCF,NMN,NPC
					    .IFNDF ID
						SIDCNT==SIDCNT+1
						ID==SIDCNT
					    .ENDC
					    II==.
					    .BLKW SPCHDR/2
						TT	IDFLAG,ID
						TT	MAPRTN,MMRT
						TT	SIZE,SZ
						TT	NPERB,NPB
						TT	GCFG,GCF
						TT	NMIN,NMN
						TT	NPCT,NPC
						TT	NXTSID,SIDCHN
						TT	FFREE,0
						TT	FSTBUF,0
						TT	LSTBUF,0
						TT	NALLOC,0
						TT	NFREE,0
					    .=II+SPCHDR
					    SIDCHN == II
					    .IF2
						.IFGE MAXIDF-ID
						    II==.
						    .=SIDTBL+<ID*2>
						    SIDCHN
						    .=II
						.ENDC
					    .ENDC
					.ENDM
	PALX 222	04/24/75  12:00:45	PAGE 14
	HALHED PAL[HAL,HE]	PAGE 4.5 	DEFS -- standard definitions for HAL runtime routines

					
		000030			MAXIDF == 30	;MAX INDEX INTO SIDTBL
					
	PALX 222	04/24/75  12:00:45	PAGE 15
	HALHED PAL[HAL,HE]	PAGE 5 	DEFS -- standard definitions for HAL runtime routines

					;Graph structure definitions
					;RHT 9/74
					
					;CELL LINKS
		000000				II==0
						XX	DATUM
						   .IFDF DATUM
						       .IF1
						       .ERROR You are using DATUM in two ways!!!
						       .ENDC
						   .ENDC
		000000				    DATUM == II
		000002				    II == II+2
						XX	LINKF
						   .IFDF LINKF
						       .IF1
						       .ERROR You are using LINKF in two ways!!!
						       .ENDC
						   .ENDC
		000002				    LINKF == II
		000004				    II == II+2
						XX	LINKB
						   .IFDF LINKB
						       .IF1
						       .ERROR You are using LINKB in two ways!!!
						       .ENDC
						   .ENDC
		000004				    LINKB == II
		000006				    II == II+2
					
					;GRAPH NODES
		000000				II==0
						XX	NXTGN		;CHAIN OF ALL GNODES IN THE WORLD
						   .IFDF NXTGN
						       .IF1
						       .ERROR You are using NXTGN in two ways!!!
						       .ENDC
						   .ENDC
		000000				    NXTGN == II
		000002				    II == II+2
						XX	PRVGN
						   .IFDF PRVGN
						       .IF1
						       .ERROR You are using PRVGN in two ways!!!
						       .ENDC
						   .ENDC
		000002				    PRVGN == II
		000004				    II == II+2
						XX	INVMRK		;USED AS FLAG
	PALX 222	04/24/75  12:00:45	PAGE 16
	HALHED PAL[HAL,HE]	PAGE 5.1 	DEFS -- standard definitions for HAL runtime routines

						   .IFDF INVMRK
						       .IF1
						       .ERROR You are using INVMRK in two ways!!!
						       .ENDC
						   .ENDC
		000004				    INVMRK == II
		000006				    II == II+2
						XX	GNVAL		;POINTER AT VALUE
						   .IFDF GNVAL
						       .IF1
						       .ERROR You are using GNVAL in two ways!!!
						       .ENDC
						   .ENDC
		000006				    GNVAL == II
		000010				    II == II+2
						XX	GNDEPS		;DEPENDENT GRAPH NODES
						   .IFDF GNDEPS
						       .IF1
						       .ERROR You are using GNDEPS in two ways!!!
						       .ENDC
						   .ENDC
		000010				    GNDEPS == II
		000012				    II == II+2
						XX	GNCLCS		;CALCULATOR LIST (DBL LINKED)
						   .IFDF GNCLCS
						       .IF1
						       .ERROR You are using GNCLCS in two ways!!!
						       .ENDC
						   .ENDC
		000012				    GNCLCS == II
		000014				    II == II+2
						XX	GNCHGS		;CHANGE LIST
						   .IFDF GNCHGS
						       .IF1
						       .ERROR You are using GNCHGS in two ways!!!
						       .ENDC
						   .ENDC
		000014				    GNCHGS == II
		000016				    II == II+2
					
					;CALCULATOR CELL
		000000				II==0
						XX	NXTCLC		;LIST LINK
						   .IFDF NXTCLC
						       .IF1
						       .ERROR You are using NXTCLC in two ways!!!
						       .ENDC
						   .ENDC
		000000				    NXTCLC == II
	PALX 222	04/24/75  12:00:45	PAGE 17
	HALHED PAL[HAL,HE]	PAGE 5.2 	DEFS -- standard definitions for HAL runtime routines

		000002				    II == II+2
						XX	NEEDED		;LIST OF NEEDED NODES
						   .IFDF NEEDED
						       .IF1
						       .ERROR You are using NEEDED in two ways!!!
						       .ENDC
						   .ENDC
		000002				    NEEDED == II
		000004				    II == II+2
						XX	FORM		;SOME SORT OF CODE TO EVAL
						   .IFDF FORM
						       .IF1
						       .ERROR You are using FORM in two ways!!!
						       .ENDC
						   .ENDC
		000004				    FORM == II
		000006				    II == II+2
					
					;CHANGER CELL
		000000				II==0
						XX	NXTCHG
						   .IFDF NXTCHG
						       .IF1
						       .ERROR You are using NXTCHG in two ways!!!
						       .ENDC
						   .ENDC
		000000				    NXTCHG == II
		000002				    II == II+2
						XX	CHGCOD
						   .IFDF CHGCOD
						       .IF1
						       .ERROR You are using CHGCOD in two ways!!!
						       .ENDC
						   .ENDC
		000002				    CHGCOD == II
		000004				    II == II+2
					
	PALX 222	04/24/75  12:00:45	PAGE 18
	INTOPS PAL[HAL,HE]	PAGE 2.1 	DEFS -- standard definitions for HAL runtime routines

					.INSRT	INTOPS.PAL[HAL,HE]
	PALX 222	04/24/75  12:00:45	PAGE 19
	INTOPS PAL[HAL,HE]	PAGE 1 	DEFS -- standard definitions for HAL runtime routines

				COMMENT ⊗   VALID 00002 PAGES
				C REC  PAGE   DESCRIPTION
				C00001 00001
				C00002 00002		II == 0		Start of interpreter jump table
				C00005 ENDMK
					C⊗;
	PALX 222	04/24/75  12:00:45	PAGE 20
	INTOPS PAL[HAL,HE]	PAGE 2 	DEFS -- standard definitions for HAL runtime routines

		000000				II == 0		;Start of interpreter jump table
						;Motion control
						;PREPMOVE
						;STARTMOVE
					
						;Variable declaration
					MAKEOP	(XVARIABLE,VARIABLE);o,a	;Put a ptr to a at offset o, current level.
						XX	(XVARIABLE
						   .IFDF (XVARIABLE
						       .IF1
						       .ERROR You are using (XVARIABLE in two ways!!!
						       .ENDC
						   .ENDC
						    (XVARIABLE == II
		000002				    II == II+2
					
						;Stack operations
					MAKEOP	XGTVAL,GTVAL;a	;Push value of arg (level-offset pair).
						XX	XGTVAL
						   .IFDF XGTVAL
						       .IF1
						       .ERROR You are using XGTVAL in two ways!!!
						       .ENDC
						   .ENDC
		000002				    XGTVAL == II
		000004				    II == II+2
					MAKEOP  XCHNGE,CHNGE;a	;Pop value into arg (level-offset pair).
						XX	XCHNGE
						   .IFDF XCHNGE
						       .IF1
						       .ERROR You are using XCHNGE in two ways!!!
						       .ENDC
						   .ENDC
		000004				    XCHNGE == II
		000006				    II == II+2
					MAKEOP	XPUSH, PUSH ;a	;Push arg directly (as a ptr) onto stack. For cnstnts.
						XX	XPUSH
						   .IFDF XPUSH
						       .IF1
						       .ERROR You are using XPUSH in two ways!!!
						       .ENDC
						   .ENDC
		000006				    XPUSH == II
		000010				    II == II+2
					MAKEOP	XPOP,  POP	;Pop stack.
						XX	XPOP
						   .IFDF XPOP
						       .IF1
						       .ERROR You are using XPOP in two ways!!!
	PALX 222	04/24/75  12:00:45	PAGE 21
	INTOPS PAL[HAL,HE]	PAGE 2.1 	DEFS -- standard definitions for HAL runtime routines

						       .ENDC
						   .ENDC
		000010				    XPOP == II
		000012				    II == II+2
					MAKEOP	XCOPY, COPY ;n	;Copy n'th down to top of stack.
						XX	XCOPY
						   .IFDF XCOPY
						       .IF1
						       .ERROR You are using XCOPY in two ways!!!
						       .ENDC
						   .ENDC
		000012				    XCOPY == II
		000014				    II == II+2
					MAKEOP	XREPLAC,REPLAC;n;Replace n'th down with top (which pop)
						XX	XREPLAC
						   .IFDF XREPLAC
						       .IF1
						       .ERROR You are using XREPLAC in two ways!!!
						       .ENDC
						   .ENDC
		000014				    XREPLAC == II
		000016				    II == II+2
					MAKEOP	XFLUSH,FLUSH	;Flush the entire stack.
						XX	XFLUSH
						   .IFDF XFLUSH
						       .IF1
						       .ERROR You are using XFLUSH in two ways!!!
						       .ENDC
						   .ENDC
		000016				    XFLUSH == II
		000020				    II == II+2
					
						;Flow of control
					MAKEOP	XJUMP, JUMP ;a	;Jump to address
						XX	XJUMP
						   .IFDF XJUMP
						       .IF1
						       .ERROR You are using XJUMP in two ways!!!
						       .ENDC
						   .ENDC
		000020				    XJUMP == II
		000022				    II == II+2
					MAKEOP	XJUMPZ,JUMPZ;a	;Jump to address only if top zero (which pop)
						XX	XJUMPZ
						   .IFDF XJUMPZ
						       .IF1
						       .ERROR You are using XJUMPZ in two ways!!!
						       .ENDC
						   .ENDC
	PALX 222	04/24/75  12:00:45	PAGE 22
	INTOPS PAL[HAL,HE]	PAGE 2.2 	DEFS -- standard definitions for HAL runtime routines

		000022				    XJUMPZ == II
		000024				    II == II+2
					MAKEOP	XTERMINATE,TERMINATE	;Terminate this interpreter
						XX	XTERMINATE
						   .IFDF XTERMINATE
						       .IF1
						       .ERROR You are using XTERMINATE in two ways!!!
						       .ENDC
						   .ENDC
		000024				    XTERMINATE == II
		000026				    II == II+2
					MAKEOP  XPROC, PROC;d,al;Call a procedure at d, with arg list al.
						XX	XPROC
						   .IFDF XPROC
						       .IF1
						       .ERROR You are using XPROC in two ways!!!
						       .ENDC
						   .ENDC
		000026				    XPROC == II
		000030				    II == II+2
					MAKEOP	XRETURN,RETURN	;Return from procedure
						XX	XRETURN
						   .IFDF XRETURN
						       .IF1
						       .ERROR You are using XRETURN in two ways!!!
						       .ENDC
						   .ENDC
		000030				    XRETURN == II
		000032				    II == II+2
					MAKEOP	XSPROUT,SPROUT;d;Sprout an interpreter at d.
						XX	XSPROUT
						   .IFDF XSPROUT
						       .IF1
						       .ERROR You are using XSPROUT in two ways!!!
						       .ENDC
						   .ENDC
		000032				    XSPROUT == II
		000034				    II == II+2
					MAKEOP	XFORCHK,FORCHK;d;Do a FOR-loop check, and fail to location d.
						XX	XFORCHK
						   .IFDF XFORCHK
						       .IF1
						       .ERROR You are using XFORCHK in two ways!!!
						       .ENDC
						   .ENDC
		000034				    XFORCHK == II
		000036				    II == II+2
					
						;Arithmetic
	PALX 222	04/24/75  12:00:45	PAGE 23
	INTOPS PAL[HAL,HE]	PAGE 2.3 	DEFS -- standard definitions for HAL runtime routines

					MAKEOP	XSADD, SADD	;S+S:  Add top two elts, pop, pop, push answer
						XX	XSADD
						   .IFDF XSADD
						       .IF1
						       .ERROR You are using XSADD in two ways!!!
						       .ENDC
						   .ENDC
		000036				    XSADD == II
		000040				    II == II+2
					MAKEOP	XSSUB, SSUB	;S-S:  Sub top two elts, pop, pop, push answer
						XX	XSSUB
						   .IFDF XSSUB
						       .IF1
						       .ERROR You are using XSSUB in two ways!!!
						       .ENDC
						   .ENDC
		000040				    XSSUB == II
		000042				    II == II+2
					MAKEOP	XSMUL, SMUL	;S*S:  Mul top two elts, pop, pop, push answer
						XX	XSMUL
						   .IFDF XSMUL
						       .IF1
						       .ERROR You are using XSMUL in two ways!!!
						       .ENDC
						   .ENDC
		000042				    XSMUL == II
		000044				    II == II+2
					MAKEOP	XSDIV, SDIV	;S/S:  Div top two elts, pop, pop, push answer
						XX	XSDIV
						   .IFDF XSDIV
						       .IF1
						       .ERROR You are using XSDIV in two ways!!!
						       .ENDC
						   .ENDC
		000044				    XSDIV == II
		000046				    II == II+2
					MAKEOP	XSNEG, SNEG	;-S:   Negate top elt, pop, push answer
						XX	XSNEG
						   .IFDF XSNEG
						       .IF1
						       .ERROR You are using XSNEG in two ways!!!
						       .ENDC
						   .ENDC
		000046				    XSNEG == II
		000050				    II == II+2
					MAKEOP	XVMAG, VMAG	;Scalar ← norm of vector
						XX	XVMAG
						   .IFDF XVMAG
						       .IF1
	PALX 222	04/24/75  12:00:45	PAGE 24
	INTOPS PAL[HAL,HE]	PAGE 2.4 	DEFS -- standard definitions for HAL runtime routines

						       .ERROR You are using XVMAG in two ways!!!
						       .ENDC
						   .ENDC
		000050				    XVMAG == II
		000052				    II == II+2
					MAKEOP	XSVMUL,SVMUL	;Vector ← scalar * vector
						XX	XSVMUL
						   .IFDF XSVMUL
						       .IF1
						       .ERROR You are using XSVMUL in two ways!!!
						       .ENDC
						   .ENDC
		000052				    XSVMUL == II
		000054				    II == II+2
					MAKEOP	XVDOT, VDOT	;S ← vector dot vector
						XX	XVDOT
						   .IFDF XVDOT
						       .IF1
						       .ERROR You are using XVDOT in two ways!!!
						       .ENDC
						   .ENDC
		000054				    XVDOT == II
		000056				    II == II+2
					MAKEOP	XPVDOT,PVDOT	;S ← vector dot vector
						XX	XPVDOT
						   .IFDF XPVDOT
						       .IF1
						       .ERROR You are using XPVDOT in two ways!!!
						       .ENDC
						   .ENDC
		000056				    XPVDOT == II
		000060				    II == II+2
					MAKEOP	XVMAKE,VMAKE	;V ← vector(scalar,scalar,scalar)
						XX	XVMAKE
						   .IFDF XVMAKE
						       .IF1
						       .ERROR You are using XVMAKE in two ways!!!
						       .ENDC
						   .ENDC
		000060				    XVMAKE == II
		000062				    II == II+2
					MAKEOP	XVADD, VADD	;V ← vector + vector
						XX	XVADD
						   .IFDF XVADD
						       .IF1
						       .ERROR You are using XVADD in two ways!!!
						       .ENDC
						   .ENDC
		000062				    XVADD == II
	PALX 222	04/24/75  12:00:45	PAGE 25
	INTOPS PAL[HAL,HE]	PAGE 2.5 	DEFS -- standard definitions for HAL runtime routines

		000064				    II == II+2
						;UNITV remove	;Vector ← vector / its norm
						;CROSV remove	;Vector ← vector cross vector
					MAKEOP	XTVMUL,TVMUL	;Vector ← trans * vector
						XX	XTVMUL
						   .IFDF XTVMUL
						       .IF1
						       .ERROR You are using XTVMUL in two ways!!!
						       .ENDC
						   .ENDC
		000064				    XTVMUL == II
		000066				    II == II+2
						;FTOF
					MAKEOP	XTMAKE,TMAKE	;Trans ← trans(rot,vector)
						XX	XTMAKE
						   .IFDF XTMAKE
						       .IF1
						       .ERROR You are using XTMAKE in two ways!!!
						       .ENDC
						   .ENDC
		000066				    XTMAKE == II
		000070				    II == II+2
						;TTMUL
						;TINV
	PALX 222	04/24/75  12:00:45	PAGE 26
	COMP PAL[HAL,HE]	PAGE 2.1 	DEFS -- standard definitions for HAL runtime routines

						;The interpreter operation table
					
					;.INSRT	COM0.PAL[H,RF]
					;.INSRT	COM1.PAL[H,RF]
					;.INSRT	COM2.PAL[H,RF]
					;.INSRT	COM3.PAL[H,RF]
					.INSRT	COMT.PAL[H,RF]
	PALX 222	04/24/75  12:00:45	PAGE 27
	COMT PAL[H,RF]	PAGE 1 	DEFS -- standard definitions for HAL runtime routines

				COMMENT ⊗   VALID 00002 PAGES
				C REC  PAGE   DESCRIPTION
				C00001 00001
				C00002 00002		Small test of interpreter sprouts
				C00003 ENDMK
					C⊗;
	PALX 222	04/24/75  12:00:45	PAGE 28
	COMT PAL[H,RF]	PAGE 2 	DEFS -- standard definitions for HAL runtime routines

						;Small test of interpreter sprouts
					L10:
	044000	000006				XPUSH
	044002	000000				0
	044004	000032				XSPROUT
	044006	044020				L1
	044010	044036				L2
	044012	044044				L3
	044014	000000				0
	044016	000024				XTERMINATE
					
	044020	000006			L1:	XPUSH
	044022	000001				1
	044024	000032				XSPROUT
	044026	044052				L4
	044030	044060				L5
	044032	000000				0
	044034	000024				XTERMINATE
					
					
	044036	000006			L2:	XPUSH
	044040	000002				2
	044042	000024				XTERMINATE
					
	044044	000006			L3:	XPUSH
	044046	000003				3
	044050	000024				XTERMINATE
					
	044052	000006			L4:	XPUSH
	044054	000004				4
	044056	000024				XTERMINATE
					
	044060	000006			L5:	XPUSH
	044062	000005				5
	044064	000024				XTERMINATE
	PALX 222	04/24/75  12:00:45	PAGE 29
	COMP PAL[HAL,HE]	PAGE 2.2 	DEFS -- standard definitions for HAL runtime routines

					
		000001			.END
	PALX 222	04/24/75  12:00:45	PAGE 30
	COMP PAL[HAL,HE]	PAGE 2 	***SYMBOL TABLE***      

	AC0	000000RH		MARK2	006402H		XJUMP	000020H	
	AC1	000001RH		MARK3	006403H		XJUMPZ	000022H	
	AC2	000002RH		MARK4	006404H		XPOP	000010H	
	AC3	000003RH		MARK5	006405H		XPROC	000026H	
	AC4	000004RH		MAXIDF	000030H		XPUSH	000006H	
	AC5	000005RH		METH	000000H		XPVDOT	000056H	
	BUFHDR	000010H		NALLOC	000026H		XREPLA	000014H	
	CHGCOD	000002H		NEEDED	000002H		XRETUR	000030H	
	CLKCNT	172544		NFREE	000030H		XSADD	000036H	
	CLKS	172540		NMIN	000012H		XSDIV	000044H	
	CLKSET	172542		NPCT	000014H		XSMUL	000042H	
	CLKTRP	000104H		NPERB	000006H		XSNEG	000046H	
	DATUM	000000H		NXTBUF	000000H		XSPROU	000032H	
	ERRTRP	000004H		NXTCHG	000000H		XSSUB	000040H	
	FFREE	000020H		NXTCLC	000000H		XSVMUL	000052H	
	FLOAT	000001H		NXTGN	000000H		XTERMI	000024H	
	FORM	000004H		NXTMTH	000002H		XTMAKE	000066H	
	FSTBLK	000006H		NXTSID	000016H		XTVMUL	000064H	
	FSTBUF	000022H		OBUF	000160H		XVADD	000062H	
	GCFG	000010H		PC	000007R		XVDOT	000054H	
	GNCHGS	000014H		PRVBUF	000002H		XVMAG	000050H	
	GNCLCS	000012H		PRVGN	000002H		XVMAKE	000060H	
	GNDEPS	000010H		PS	177776	
	GNVAL	000006H		R0	000000R	
	HCOR	077776		R1	000001R	
	IBUF	000150H		R2	000002R	
	IDFLAG	000000H		R3	000003R	
	II	000070H		R4	000004R	
	ILGINS	000010H		R5	000005R	
	INVMRK	000004H		RF	000005RH	
	KBIR	177562		RUG	050000	
	KBIS	177560		SIDCHN	000000H	
	KBOR	177566		SIDCNT	000000H	
	KBOS	177564		SIDHED	000000H	
	L1	044020		SIZE	000004H	
	L10	044000		SP	000006R	
	L2	044036		SPCHDR	000032H	
	L3	044044		STRT11	000500	
	L4	044052		TAG	177777H	
	L5	044060		TAGID	177776H	
	LINKB	000004H		TEMP	044000H	
	LINKF	000002H		WORD0	000000H	
	LSTBLK	000004H		XCHNGE	000004H	
	LSTBUF	000024H		XCOPY	000012H	
	MAPRTN	000002H		XFLUSH	000016H	
	MARK0	006400H		XFORCH	000034H	
	MARK1	006401H		XGTVAL	000002H	
	PALX 222	04/24/75  12:00:45	PAGE 31
	COMP PAL[HAL,HE]	PAGE 2 	***SYMBOL TABLE***      


1 ERRORS DETECTED

10 SECONDS RUN-TIME